# encoding=utf-8

""" STP-23L 串口数据包
起始符: 4B
设备地址: 1B
命令码: 1B
整包偏移地址:
    - LSB: 1B
    - MSB: 1B
数据长度:
    - LSB: 1B
    - MSB: 1B
数据域:
    - DATA: 由上面两个数据推算
校验码:
    - CS: 1B
"""
from typing import List

HEADER = 0xAA  # 起始符
device_address = 0x00  # 设备地址
chunk_offset = 0x00  # 偏移地址命令
PACK_GET_DISTANCE = 0x02  # 获取测量数据命令
PACK_RESET_SYSTEM = 0x0D  # 复位命令
PACK_STOP = 0x0F  # 停止测量数据传输命令
PACK_ACK = 0x10  # 应答码命令
PACK_VERSION = 0x14  # 获取传感器信息命令


class LidarPointTypedef:
    def __init__(self):
        # 距离数据：测量目标距离单位 mm
        self.distance: int = 0
        # 环境噪声：当前测量环境下的外部环境噪声，越大说明噪声越大
        self.noise: int = 0
        # 接收强度信息：测量目标反射回的光强度
        self.peak: int = 0
        # 置信度：由环境噪声和接收强度信息融合后的测量点的可信度
        self.confidence: int = 0
        # 积分次数：当前传感器测量的积分次数
        self.intg: int = 0
        # 温度表征值：测量芯片内部温度变化表征值，只是一个温度变化量无法与真实温度对应
        self.reftof: int = 0


class AckResultData:
    def __init__(self):
        # 答复的命令 id
        self.ack_cmd_id: int = 0
        # 1表示成功,0表示失败
        self.result: int = 0


class LiManuConfig:
    def __init__(self):
        # 软件版本号
        self.version: int = 0
        # 硬件版本号
        self.hardware_version: int = 0
        # 生产日期
        self.manufacture_date: int = 0
        # 生产时间
        self.manufacture_time: int = 0
        # 设备 id1
        self.id1: int = 0
        # 设备 id2
        self.id2: int = 0
        # 设备 id3
        self.id3: int = 0
        # sn
        self.sn: List[int] = [0, 0, 0, 0, 0, 0, 0, 0]
        # 角度信息
        self.pitch_angle: List[int] = [0, 0, 0, 0]
        # 盲区信息
        self.blind_area: List[int] = [0, 0]
        # 数据点频
        self.frequence: int = 0